﻿#include "widget.h"
#include "ui_widget.h"
#include "QTextCodec"
#include "qpushbutton.h"
//需求
// teacher类
// student 类
//下课后，老师会触发信号，饿了，学生响应信号，请客吃饭

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget),
      zt(0),
      st(0)
{
    ui->setupUi(this);
    zt= new Teacher(this);
    st= new student(this);
    QTextCodec *codec = QTextCodec::codecForName("GBK");

    //connect(zt,&Teacher::hungry,st,&student::treat); //这种是无参数的

    //重载的版本
    void (Teacher::*TeacherSignal) (QString)=& Teacher::hungry;
    void (student::*studentSlot) (QString)=& student::treat;
    connect(zt,TeacherSignal,st,studentSlot);//有参数的
    classIsover();

    QPushButton * btn1=new QPushButton(codec->toUnicode("下课"),this);
    this->resize(500,500);
    connect(btn1,&QPushButton::clicked,this,&Widget::classIsover);//添加按键
    //有重载的话，需要函数指针指定。
    void (Teacher::*TeacherSignal1) (void)=& Teacher::hungry;//函数指针
    void (student::*studentSlot1) (void)=& student::treat;

    connect(zt,TeacherSignal1,st,studentSlot1);//
    connect(btn1,&QPushButton::clicked,zt,TeacherSignal1);

    //拓展
    //1,信号可以连接信号
    //2,一个信号可以连接多个槽函数
    //3，多个信号可以额连接同一个槽函数
    //4，信号和槽函数的参数，必须类型一一对应
    //5，信号和槽的参数个数，未必一致，信号的参数个数，可以多一个

    [=](){
        btn1->setText("aaa");
    }();

}

Widget::~Widget()
{
    delete ui;
}

void Widget::classIsover()
{
    QTextCodec *codec = QTextCodec::codecForName("GBK");//修改这两行
    //下课，调用后，触发老师饿了的信号
    emit zt->hungry(codec->toUnicode("宫保鸡丁"));
}
